﻿using System;
using System.Drawing;
using System.IO;
using System.Reflection;
using System.Linq;
using Kaleida.ServiceMonitor.Framework;
using Kaleida.ServiceMonitor.Model;

namespace Kaleida.ServiceMonitor.UI
{
    static class ApplicationIcon
    {
        public static Icon Error
        {
            get { return GetIcon("Error.ico"); }
        }
        
        public static Icon Running
        {
            get { return GetIcon("Running.ico"); }
        }
        
        public static Icon Stopped
        {
            get { return GetIcon("Stopped.ico"); }
        }

        public static Icon Application
        {
            get { return GetIcon("Application.ico"); }
        }

        private static Icon GetIcon(string iconName)
        {
            Assembly assembly = Assembly.GetExecutingAssembly();

            var resourceName = "Kaleida.ServiceMonitor.UI.Icons." + iconName;
            Stream stream = assembly.GetManifestResourceStream(resourceName);

            if(stream == null)
            {
                var resourceNames = assembly.GetManifestResourceNames().ToBulletedList();
                throw new InvalidOperationException(string.Format("Could not load resource '{0}' from assembly {1}. Valid names:\r\n{2}", resourceName, assembly.FullName, resourceNames));
            }

            return new Icon(stream);

        }
    }
}
